﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
using EN = class_Entidad;

namespace class_DAO
{
    public class PROVEEDOR_DAO
    {
        /// <summary>
        /// Lista de nombre de grupo
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        //public static List<EN.PROVEEDOR_EN> ListaGrupo(EN.PROVEEDOR_EN param)
        //{
        //    SqlDataReader sdr;
        //    SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
        //    SqlCommand cmd = new SqlCommand("LISTA_GRUPO_ITEMS", cnx);
        //    List<EN.PROVEEDOR_EN> Lista = new List<EN.PROVEEDOR_EN>();
        //    try
        //    {
        //        cmd.CommandType = CommandType.StoredProcedure;

        //        cmd.Parameters.AddWithValue("@vID_ITENS", param.ID_ITEMS);
        //        cmd.Parameters.AddWithValue("@vDESC", param.DESC_ITEMS);

        //        cnx.Open();
        //        sdr = cmd.ExecuteReader();
        //        while (sdr.Read() == true)
        //        {
        //            EN.PROVEEDOR_EN be_Busqueda = new EN.PROVEEDOR_EN();
        //            be_Busqueda.ID_ITEMS = sdr.GetInt32(0);
        //            be_Busqueda.ID_PADRE = sdr.GetInt32(1);
        //            be_Busqueda.DESC_ITEMS = sdr.GetString(2);
        //            be_Busqueda.EST_ITEMS = sdr.GetInt32(3);
        //            be_Busqueda.DESC_EST_ITEMS = (be_Busqueda.EST_ITEMS == 1) ? "ACTIVO" : "INACTIVO";
        //            Lista.Add(be_Busqueda);
        //        }
        //        sdr.Close();
        //        sdr.Dispose();
        //    }
        //    catch (Exception ex)
        //    {

        //        throw ex;
        //    }
        //    return Lista;
        //}

        /// <summary>
        /// Lista de los Items segun el grupo
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public static List<EN.PROVEEDOR_EN> ListaProveedor(EN.PROVEEDOR_EN param)
        {
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlDataReader sdr;
            SqlCommand cmd = new SqlCommand("sp_Proveedor_selAll", cnx);
            List<EN.PROVEEDOR_EN> Lista = new List<EN.PROVEEDOR_EN>();
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@vID_PROVEEDOR", param.ID_PROVEEDOR);
                //cmd.Parameters.AddWithValue("@vTIPO_EMPRESA", param.TIPO_EMPRESA);
                cmd.Parameters.AddWithValue("@vDESC", param.NOMBRE_COMER);

                cnx.Open();
                sdr = cmd.ExecuteReader();
                while (sdr.Read() == true)
                {
                    EN.PROVEEDOR_EN be_Busqueda = new EN.PROVEEDOR_EN();
                    be_Busqueda.ID_PROVEEDOR = sdr.GetInt32(0);
                    be_Busqueda.RUC_PROV = sdr.GetString(1);
                    be_Busqueda.RAZON_SOC = sdr.GetString(2);
                    be_Busqueda.ANT_RUC_PROV = sdr.GetString(3);
                    be_Busqueda.ESTADO_PROV = sdr.GetString(4);
                    be_Busqueda.NOMBRE_COMER = sdr.GetString(5);
                    be_Busqueda.DIRECCION = sdr.GetString(6);
                    be_Busqueda.TELEFONO = sdr.GetString(7);
                    be_Busqueda.DEPENDENCIA = sdr.GetString(8);
                    be_Busqueda.TIPO_EMPRESA = sdr.GetString(9);
                    be_Busqueda.COD_UBIGEO = sdr.GetString(10);
                    //be_Busqueda.ESTADO_PROV = (be_Busqueda.ESTADO_PROV == 1) ? "ACTIVO" : "INACTIVO";
                    Lista.Add(be_Busqueda);
                }
                sdr.Close();
                sdr.Dispose();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return Lista;
        }

        public static List<EN.PROVEEDOR_EN> ListaProveedorBuscar(EN.PROVEEDOR_EN param)
        {
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlDataReader sdr;
            SqlCommand cmd = new SqlCommand("sp_Proveedor_selBuscar", cnx);
            List<EN.PROVEEDOR_EN> Lista = new List<EN.PROVEEDOR_EN>();
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Parameters.AddWithValue("@vRUC", param.RUC_PROV);
                //cmd.Parameters.AddWithValue("@vTIPO_EMPRESA", param.TIPO_EMPRESA);
                cmd.Parameters.AddWithValue("@vDESC", param.NOMBRE_COMER);

                cnx.Open();
                sdr = cmd.ExecuteReader();
                while (sdr.Read() == true)
                {
                    EN.PROVEEDOR_EN be_Busqueda = new EN.PROVEEDOR_EN();
                    be_Busqueda.ID_PROVEEDOR = sdr.GetInt32(0);
                    be_Busqueda.RUC_PROV = sdr.GetString(1);
                    be_Busqueda.RAZON_SOC = sdr.GetString(2);
                    be_Busqueda.ANT_RUC_PROV = sdr.GetString(3);
                    be_Busqueda.ESTADO_PROV = sdr.GetString(4);
                    be_Busqueda.NOMBRE_COMER = sdr.GetString(5);
                    be_Busqueda.DIRECCION = sdr.GetString(6);
                    be_Busqueda.TELEFONO = sdr.GetString(7);
                    be_Busqueda.DEPENDENCIA = sdr.GetString(8);
                    be_Busqueda.TIPO_EMPRESA = sdr.GetString(9);
                    be_Busqueda.COD_UBIGEO = sdr.GetString(10);
                    //be_Busqueda.ESTADO_PROV = (be_Busqueda.ESTADO_PROV == 1) ? "ACTIVO" : "INACTIVO";
                    Lista.Add(be_Busqueda);
                }
                sdr.Close();
                sdr.Dispose();
            }
            catch (Exception ex)
            {

                throw ex;
            }
            return Lista;
        }

        /// <summary>
        /// Registro de Grupo e Items
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public static int RegistroProveedor(EN.PROVEEDOR_EN param)
        {
            int Id = 0;

            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlTransaction transaction;
            SqlCommand cmd = new SqlCommand("sp_Proveedor_add", cnx);
            //transaction = cnx.BeginTransaction("Registro");
            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter sqlPrm = new SqlParameter("@RUC_PROV", SqlDbType.NVarChar);
                sqlPrm.Value = param.RUC_PROV;
                sqlPrm.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm);

                SqlParameter sqlPrm2 = new SqlParameter("@RAZON_SOC", SqlDbType.NVarChar);
                sqlPrm2.Value = param.RAZON_SOC;
                sqlPrm2.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm2);

                SqlParameter sqlPrm3 = new SqlParameter("@ANT_RUC_PROV", SqlDbType.NVarChar);
                sqlPrm3.Value = param.ANT_RUC_PROV;
                sqlPrm3.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm3);

                SqlParameter sqlPrm4 = new SqlParameter("@ESTADO_PROV", SqlDbType.NVarChar);
                sqlPrm4.Value = param.ESTADO_PROV;
                sqlPrm4.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm4);

                SqlParameter sqlPrm5 = new SqlParameter("@NOMBRE_COMER", SqlDbType.NVarChar);
                sqlPrm5.Value = param.NOMBRE_COMER;
                sqlPrm5.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm5);

                SqlParameter sqlPrm6 = new SqlParameter("@DIRECCION", SqlDbType.NVarChar);
                sqlPrm6.Value = param.ANT_RUC_PROV;
                sqlPrm6.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm6);

                SqlParameter sqlPrm7 = new SqlParameter("@TELEFONO", SqlDbType.NVarChar);
                sqlPrm7.Value = param.@TELEFONO;
                sqlPrm7.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm7);

                SqlParameter sqlPrm8 = new SqlParameter("@DEPENDENCIA", SqlDbType.NVarChar);
                sqlPrm8.Value = param.ANT_RUC_PROV;
                sqlPrm8.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm8);

                SqlParameter sqlPrm9 = new SqlParameter("@TIPO_EMPRESA", SqlDbType.NVarChar);
                sqlPrm9.Value = param.ANT_RUC_PROV;
                sqlPrm9.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm9);

                SqlParameter sqlPrm10 = new SqlParameter("@COD_UBIGEO", SqlDbType.NVarChar);
                sqlPrm10.Value = param.ANT_RUC_PROV;
                sqlPrm10.Direction = ParameterDirection.Output;
                cmd.Parameters.Add(sqlPrm10);


                cnx.Open();
                cmd.ExecuteNonQuery();
                Id = Convert.ToInt32(cmd.Parameters["@vID_ITEMS"].Value);
                cnx.Close();                
                
            }
            catch (Exception ex)
            {                
                //transaction.Rollback();
                cnx.Close();
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    //transaction.Commit();
                    cnx.Close();
                }
            }

            return Id;
        }

        /// <summary>
        /// Actualiza registro de Items
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public static int EditarProveedor(EN.PROVEEDOR_EN param)
        {
            int Accion = 0;
            SqlConnection cnx = new SqlConnection(ConfigurationManager.ConnectionStrings["sqlCNX"].ConnectionString);
            SqlCommand cmd = new SqlCommand("sp_Proveedor_upd", cnx);   

            try
            {
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter sqlPrm = new SqlParameter("@RUC_PROV", SqlDbType.NVarChar);
                sqlPrm.Value = param.RUC_PROV;
                sqlPrm.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm);

                SqlParameter sqlPrm2 = new SqlParameter("@RAZON_SOC", SqlDbType.NVarChar);
                sqlPrm2.Value = param.RAZON_SOC;
                sqlPrm2.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm2);

                SqlParameter sqlPrm3 = new SqlParameter("@ANT_RUC_PROV", SqlDbType.NVarChar);
                sqlPrm3.Value = param.ANT_RUC_PROV;
                sqlPrm3.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm3);

                SqlParameter sqlPrm4 = new SqlParameter("@ESTADO_PROV", SqlDbType.NVarChar);
                sqlPrm4.Value = param.ESTADO_PROV;
                sqlPrm4.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm4);

                SqlParameter sqlPrm5 = new SqlParameter("@NOMBRE_COMER", SqlDbType.NVarChar);
                sqlPrm5.Value = param.NOMBRE_COMER;
                sqlPrm5.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm5);

                SqlParameter sqlPrm6 = new SqlParameter("@DIRECCION", SqlDbType.NVarChar);
                sqlPrm6.Value = param.ESTADO_PROV;
                sqlPrm6.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm6);

                SqlParameter sqlPrm7 = new SqlParameter("@TELEFONO", SqlDbType.NVarChar);
                sqlPrm7.Value = param.TELEFONO;
                sqlPrm7.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm7);

                SqlParameter sqlPrm8 = new SqlParameter("@DEPENDENCIA", SqlDbType.NVarChar);
                sqlPrm8.Value = param.DEPENDENCIA;
                sqlPrm8.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm8);

                SqlParameter sqlPrm9 = new SqlParameter("@TIPO_EMPRESA", SqlDbType.NVarChar);
                sqlPrm9.Value = param.TIPO_EMPRESA;
                sqlPrm9.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm9);

                SqlParameter sqlPrm10 = new SqlParameter("@COD_UBIGEO", SqlDbType.NVarChar);
                sqlPrm10.Value = param.@COD_UBIGEO;
                sqlPrm10.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm10);


                SqlParameter sqlPrm11 = new SqlParameter("@vID_PROVEEDOR", SqlDbType.Int);
                sqlPrm11.Value = param.ID_PROVEEDOR;
                sqlPrm11.Direction = ParameterDirection.Input;
                cmd.Parameters.Add(sqlPrm11);

                cnx.Open();
                cmd.ExecuteNonQuery();
                Accion =1;
                cnx.Close();                


            }
            catch (Exception ex)
            {
                cnx.Close();
                throw ex;
            }
            finally
            {
                if (cnx.State != ConnectionState.Closed)
                {
                    cnx.Close();
                }
            }
            return Accion;
        }
    }
}
